Runtime Call Logic
makeCallExpression() returns an ExtensionFunctionCall. Saxon executes the call(XPathContext context, Sequence[] arguments) method each time the XSLT invokes the function.
@Override public ExtensionFunctionCall makeCallExpression() {return new ExtensionFunctionCall() {@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {String result = UUID.randomUUID().toString().toUpperCase(); return StringValue.makeStringValue(result); } }; } |
For functions with arguments, the implementation reads values from the supplied Saxon Sequence[], converts them to Java values, executes the business logic, and returns a Saxon Sequence. Throw XPathException for validation or execution failures.
Minimal Complete Example
package com.adminserver.helper; import net.sf.saxon.expr.XPathContext; import net.sf.saxon.lib.ExtensionFunctionCall; import net.sf.saxon.lib.ExtensionFunctionDefinition; import net.sf.saxon.om.Sequence; import net.sf.saxon.om.StructuredQName; import net.sf.saxon.trans.XPathException; import net.sf.saxon.value.SequenceType; import net.sf.saxon.value.StringValue; import java.util.UUID; public class GetNextGUIDFunction extends ExtensionFunctionDefinition {private static final StructuredQName qName = new StructuredQName("helper", "com.adminserver.webservice.helper.XsltFunctionHelper", "getNextGUID");@Override public StructuredQName getFunctionQName() {return qName; } @Override public int getMinimumNumberOfArguments() {return 0; } @Override public int getMaximumNumberOfArguments() {return 0; } @Override public SequenceType[] getArgumentTypes() {return new SequenceType[0]; } @Override public SequenceType getResultType(SequenceType[] suppliedArgs) {return SequenceType.SINGLE_STRING; } @Override public boolean hasSideEffects() {return true; } @Override public ExtensionFunctionCall makeCallExpression() {return new ExtensionFunctionCall() {@Override public Sequence call(XPathContext context, Sequence[] arguments) throws XPathException {String result = UUID.randomUUID().toString().toUpperCase(); return StringValue.makeStringValue(result); } }; } } |
makeCallExpression() returns an ExtensionFunctionCall object that Saxon executes each time the XSLT function is invoked.
Its call(XPathContext context, Sequence[] arguments) method is where customers must:
-
Read and convert input arguments from Saxon Sequence values.
-
Execute business logic, for example call helper, utility, or service methods.
-
Convert the result back to a Saxon value (Sequence) and return it.
-
Throw XPathException for validation or execution failures.